//
//  main.cpp
//  C++Learn
//
//  Created by ryu on 2021/8/11.
//

#include <iostream>
#include <cstdlib>// Header file needed to use rand
#include "swap.hpp"
using namespace std;

//函数必须写在调用位置前
int add(int a,int b){
    return a+b;
}
void swap1(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}
void swap2(int *a,int *b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
void sayHello(){
    cout<< "hello!"<<endl;
}
struct Student{
    int id;
//    char name[];
    string name;
}stu;

struct Hero{
    string name;
    int age;
    string gender;
}hero;
void bubbleSort(Hero heries[],int len){
    for(int i = 0;i<len-1;i++){
        for(int j = 1;j<len-i;j++){
            if(heries[j].age < heries[j-1].age){
//                int tmp = heries[j].age;
                Hero hero = heries[j];
                heries[j] = heries[j-1];
                heries[j-1] = hero;
            }
        }
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
//    int a1 = 10;
//    //cout显示文本  << 输出 不能拼接  >>输入 bool 布尔
//    cout << "a1 = " << a1 << "哈哈哈"<< "\n" <<endl;
//    cout << __cplusplus << endl;    //c++版本
//    char str[] = "this is string";
//    cout << str;
//
//    //整型输入
//    int a = 0;
//    cout << "请输入整型变量：" << endl;
//    cin >> a;
//    cout << a << endl;
    //判断abc谁大
//    int a = 100;
//    int b = 320;
//    int c = 200;
//
//    if(a > b){
//        if(a > c)
//            cout << "a" << a << "最大";
//        else
//            cout << "c" << c << "最大";
//    } else
//        if(b > c)
//            cout << "b" << b << "最大";
//        else
//            cout << "c" << c << "最大";
    srand((int)time(0));  // 产生随机种子  把0换成NULL也行
//    for(int i = 0; i < 10;i++){
//        int num = rand()%100 + 1;
//        cout<< num<< endl;
//    }
    //猜数字
//    int num = rand()%100 + 1;
//    cout << "随机数是：" << num <<endl;
//    while(true){
//        cout<< "输入您猜的数字"<<endl;
//        int k;
//        cin >> k;
//        if(num > k)
//            cout<< "小了";
//        else if(num < k)
//            cout<< "大了";
//        else{
//            cout<< "正确！";
//            break;
//        }
//
//    }
    //水仙花数
//    for(int i = 100;i < 1000;i++){
//        int a = i / 100;
//        int b = i % 100 / 10;
//        int c = i % 100 % 10;
//        if(pow(a,3)+pow(b, 3)+pow(c, 3) == i){
//            cout << i<<endl;
//        }
//    }
    //10*10 *
//    for(int i = 0;i<10;i++){
//        for(int j = 0;j<10;j++){
//            cout<<'*'<< "  ";
//        }
//        cout<< endl;
//    }
    
    //数组
//    int score[10];
//
//    //利用下标赋值
//    score[0] = 100;
//
//    int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
//
//    int score3[] = { 100,90,80,70,60,50,40,30,20,10,6,4 };
//
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//
//    cout << "整个数组所占内存空间为： " << sizeof(arr) << endl;
//    cout << "每个元素所占内存空间为： " << sizeof(arr[0]) << endl;
//    cout << "数组的元素个数为： " << sizeof(arr) / sizeof(arr[0]) << endl;
//
//    //2、可以通过数组名获取到数组首地址
//        cout << "数组首地址为： " << (uintptr_t)arr << endl; //int 会提示容量小
//        cout << "数组中第一个元素地址为： " << (uintptr_t)&arr[0] << endl;
//        cout << "数组中第二个元素地址为： " << (uintptr_t)&arr[1] << endl;
    
//    sayHello();
    //6.7 函数的分文件编写
    //乘法口诀表
//    for(int i = 1; i<10;i++){
//        for(int j = 1;j<=i;j++){
//            cout<<i<<" * "<<j<<" = "<<i*j<<"|";
//        }
//        cout<<"\n";
//    }
    
//    int a = 10;
//    int *p = &a;
//    cout<< sizeof(p)<<endl;
//    cout<< p<<endl;
//    cout<< sizeof(int *)<<endl;
    
//    int *p = NULL;
//    //空指针不允许访问
//    cout << *p << endl;
    
    //指针变量p指向内存地址编号为0x1100的空间
//        int * p = (int *)0x1100;
//    cout << *p << endl;
    
    //指针和数组
//    int arr[] = {1,2,3,4,5,6,7,8,9,10};
//    int *p = arr;
//    cout << *(++p);
//    int a = 10;
//    int b = 20;
//    swap1(a,b);
//    cout<< a<<endl;
//
//
//    //任何值都有地址。和java不一样，基本类型有自己的地址
//    swap2(&a,&b);
//    cout<< &a<<endl;;
//    int *p;
//
//
//    cout<<p;
//    string str = "123abc";
//    cout<<str;
    
//    stu.id = 1;
//    stu.name = "张三";
//    cout<< stu.id<<endl;
//    cout<< stu.name<<endl;
//
    struct Student s1;
    s1.id = 2;
    s1.name = "李四";
    cout<< s1.name<<endl;

    Student *p = &s1;
    
    Student *p2 = new Student;
    
//
//    cout<<p->id <<"\t"<<p->name<<endl;;
    /*
     设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。

     通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。
     */
    
    struct Hero heries[] = {
        {"后裔",2000,"男"},
        {"亚瑟",35,"男"},
        {"苏妲己",1000,"女"},
        {"安琪拉",16,"女"},
        {"鲁班",2,"男"}
    };
//    cout << heries[0].age<<endl;
    
//    bubbleSort(heries,5);
//    for(int i = 0;i < 5;i++){
//        cout<<heries[i].name + " "<<heries[i].age<<"  "+heries[i].gender<<endl;
//    }
//
//    struct Student stu = { 10,"张三" };
//
//    struct Student * p = &stu;
//    cout<< p->name<<endl;
//
//    int *p2;
//    int a2 = 10;
//    //*p 表示值， p表示指针
//    p2 = &a2;
//    cout << *p2;
    
//    Hero h = {"后裔",2000,"男"};
//    h.age++;
//    h.age++;
//    cout<<h.age;
        
    return 0;
}




